export default function() {
  /**
     * 获取 模块调用名
     * @param moduleName
     * @param funName
     * @returns {*}
     */
  function getCallName(moduleName, funName) {
    if (!moduleName) {
      return funName;
    }
    if (typeof moduleName === 'string') {
      return moduleName.trim() + '/' + funName;
    }
    if (Array.isArray(moduleName)) {
      return moduleName.join('/') + funName;
    }
    return moduleName;
  }

  /**
     * 根据不同的执行环境获取store对象
     * @returns {*|Store}
     * @constructor
     */
  function Store() {
    return this.$store || this;
  }

  /**
     *  $store.getters 的调用快捷方式
     * @param moduleName 模块名称 [a,b,c] 或者 'a'
     * @param funName    模块下面的方法名称
     * @constructor
     */
  function SG(moduleName, funName) {
    return Store.apply(this).getters[getCallName.apply(this, arguments)];
  }

  /**
     * $store.commit 的快捷方式
     * @param moduleName
     * @param funName
     * @param param
     * @constructor
     */
  function SC(moduleName, funName, param) {
    Store.apply(this).commit(getCallName.apply(this, arguments), param);
  }

  /**
     * $store.dispatch 的快捷方式
     * @param moduleName
     * @param funName
     * @param param
     * @constructor
     */
  function SD(moduleName, funName, param) {
    Store.apply(this).dispatch(getCallName.apply(this, arguments), param);
  }

  return { SG, SC, SD };
}
